package com.hulk.dryad.web.oauth2.basic.service;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.hulk.dryad.common.component.DryadUser;
import lombok.Getter;
import lombok.ToString;
import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.SpringSecurityCoreVersion;
import org.springframework.security.core.userdetails.User;

import java.util.Collection;

/**
 * @author hulk
 * @date 2020/4/16 扩展用户信息
 */
public class WebUser extends DryadUser {

	private static final long serialVersionUID = SpringSecurityCoreVersion.SERIAL_VERSION_UID;

	/**
	 * 头像
	 */
	@Getter
	@ToString.Exclude
	private String avatar;
	/**
	 * 昵称
	 */
	@Getter
	private String nickName;




	/**
	 * Construct the <code>User</code> with the details required by
	 * {@link DaoAuthenticationProvider}.
	 * @param id 用户ID
	 * @param deptId 部门ID
	 * @param username the username presented to the
	 * <code>DaoAuthenticationProvider</code>
	 * @param password the password that should be presented to the
	 * <code>DaoAuthenticationProvider</code>
	 * @param enabled set to <code>true</code> if the user is enabled
	 * @param accountNonExpired set to <code>true</code> if the account has not expired
	 * @param credentialsNonExpired set to <code>true</code> if the credentials have not
	 * expired
	 * @param accountNonLocked set to <code>true</code> if the account is not locked
	 * @param authorities the authorities that should be granted to the caller if they
	 * presented the correct username and password and the user is enabled. Not null.
	 * @throws IllegalArgumentException if a <code>null</code> value was passed either as
	 * a parameter or as an element in the <code>GrantedAuthority</code> collection
	 */
	@JsonCreator
	public WebUser(@JsonProperty("id")Long id,
				   @JsonProperty("deptId")Integer deptId,
				   @JsonProperty("tenantId")String tenantId,
				   @JsonProperty("avatar")String avatar,
				   @JsonProperty("nickName")String nickName,
				   @JsonProperty("username")String username,
				   @JsonProperty("password")String password,
				   @JsonProperty("enabled")boolean enabled,
				   @JsonProperty("accountNonExpired")boolean accountNonExpired,
				   @JsonProperty("credentialsNonExpired")boolean credentialsNonExpired,
				   @JsonProperty("accountNonLocked")boolean accountNonLocked,
				   @JsonProperty("authorities") Collection<? extends GrantedAuthority> authorities) {
		super(
				id,
				deptId,
				tenantId,
				username,
				password,
				enabled,
				accountNonExpired,
				credentialsNonExpired,
				accountNonLocked,
				authorities);

		this.avatar = avatar;
		this.nickName = nickName;

	}

}
